Appearance
在 Docker 容器中部署
在 Docker 容器中部署 PostgreSQL
启动一个 PostgreSQL 实例
```sh
$ sudo docker run -d -p 5432:5432 --name postgres-1 -e POSTGRES_PASSWORD=postgres postgres
```
在 Docker 容器中部署 Logstash
启动一个 Logstash 实例
拉取 Logstash 镜像
sh$ docker pull docker.elastic.co/logstash/logstash:7.16.1
Pipeline 配置
将管道配置放在 Logstash 能够找到的地方是非常重要的。默认情况下,容器将在 /usr/share/logstash/pipeline/ 中查找管道配置文件。
在这个例子中,我们使用一个绑定挂载的卷通过
docker run
命令来提供配置:sh$ docker run -it -v $HOME/pipeline/:/usr/share/logstash/pipeline/ docker.elastic.co/logstash/logstash:7.16.1
Logstash 将主机目录 $HOME/pipeline/ 中的每个文件解析为管道配置。
设置
通过绑定挂载提供设置文件。Logstash 希望在 /usr/share/logstash/config/ 找到它们。
可以提供一个包含所有所需文件的完整目录:
sh$ docker run -it -v $HOME/settings/:/usr/share/logstash/config/ docker.elastic.co/logstash/logstash:7.16.1
或者,单个文件也可以挂载:
sh$ docker run -it -v $HOME/settings/logstash.yml:/usr/share/logstash/config/logstash.yml docker.elastic.co/logstash/logstash:7.16.1
tip绑定挂载的配置文件将在容器中保留它们在主机系统上拥有的相同权限和所有权。确保设置权限,使文件能够被容器的日志存储用户(UID 1000)读取,理想情况下,文件不能被写入。
在 Docker 容器中部署 Redis
启动一个 Redis 实例
```sh
$ docker run -d -p 6379:6379 --name redis-1 redis redis-server --requirepass password
```
在 Docker 容器中部署 Nexus
启动一个 Nexus 实例
```sh
$ docker run -d -p 8081:8081 --name nexus sonatype/nexus3
```
在 Docker 容器中部署 Jenkins
启动一个 Jenkins 实例
```sh
$ docker run -d -p 18080:8080 --name jenkins jenkins/jenkins:lts-jdk11
```
Jenkins 容器使用宿主机的 Docker
sh
$ docker run -d -u root -p 18080:8080 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /etc/docker:/etc/docker --name jenkins jenkins/jenkins:lts-jdk11
-v /var/run/docker.sock:/var/run/docker.sock
- 通过映射主机的套接字文件到容器,让容器内启动 Docker 的时候并不是启动容器内的容器(子容器),而是启动宿主机上的容器(兄弟容器)。-v /usr/bin/docker:/usr/bin/docker
- 让容器中直接使用宿主机的 Docker 客户端。-v /etc/docker:/etc/docker
- 让容器中的 Docker 客户端使用宿主机的 Docker 配置文件, 包括国内镜像 (mirrors) 和 非 SSL 安全访问白名单 等配置。
解决访问宿主机 docker.sock
的权限问题
启动容器后, 我们通过 docker exec -it jenkins /bin/bash
命令进入容器, 执行 docker ps
验证 docker 命令是否可正常使用, 结果发现会遇到如下权限问题:
sh
jenkins@79366bf746bd:/$ docker ps
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/json": dial unix /var/run/docker.sock: connect: permission denied
解决方案:
启动容器时使用 -u root
选项。
在 Docker 容器中部署 Maven
在 Maven 项目下启动一个 Maven 实例
```sh
$ docker run -it --rm -v $HOME/.m2/:/root/.m2/ -v $PWD:/mymaven -w /mymaven maven:3.8.6-eclipse-temurin-17-alpine mvn clean package
```
在 Docker 容器中部署 Elasticsearch
启动一个 Elasticsearch 实例
```sh
$ docker run -d -p 9200:9200 --name es -e "discovery.type=single-node" elasticsearch:8.3.2
```
在 Docker 容器中部署 Docker 私有仓库
启动一个 Docker 私有仓库实例
```sh
$ docker run -d -p 5000:5000 --name registry registry:2
```
在 Docker 容器中部署 ZooKeeper
启动一个 ZooKeeper 实例
```sh
$ docker run -d --name zookeeper zookeeper
```
在 Docker 容器中部署 Kafka
启动一个 Kafka 实例
提示
通过 Docker 网络 host
模式启动以下实例。不然远程连接会报 java.net.UnknownHostException: 不知道这样的主机。 (aff96a366c15)
异常。
启动 Zookeeper 服务实例
sh$ docker run -d --network host --name zookeeper zookeeper
启动 Kafka 服务实例
sh$ docker run -d -p 9092:9092 --network host --name kafka -e ALLOW_PLAINTEXT_LISTENER=yes -e KAFKA_CFG_ZOOKEEPER_CONNECT=localhost:2181 bitnami/kafka
启动 Kafka Web UI 实例(可选)
sh$ docker run -d -p 9000:9000 --network host --name kafka-web-ui -e KAFKA_BROKERCONNECT=localhost:9092 obsidiandynamics/kafdrop
在 Docker 容器中部署 RabbitMQ
启动一个 RabbitMQ 实例
```sh
$ docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:3-management
```
在 Docker 容器中部署 SkyWalking
启动一个 SkyWalking 实例
启动 SkyWalking 服务实例
sh$ docker run -d -p 11800:11800 -p 12800:12800 --network host --name skywalking apache/skywalking-oap-server:9.4.0
启动 SkyWalking UI 服务实例
sh$ docker run -d -p 8080:8080 --network host --name skywalking-ui -e SW_OAP_ADDRESS=http://localhost:12800 apache/skywalking-ui:9.4.0